package com.xky.controller;

import com.xky.pojo.Result;
import com.xky.pojo.Score;
import com.xky.pojo.Student;
import com.xky.service.ScoreService;
import com.xky.service.StudentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@Slf4j
public class scoreController {
    @Autowired
    private ScoreService scoreService;
    @Autowired
    private StudentService studentService;

    /**
     * 添加学生的成绩
     */
    @PostMapping("/score")
    public Result addScore(@RequestBody Score score) {
        log.info("添加学生的成绩开始:{}", score);
        try {
            // 验证学生ID是否存在
            Student student = studentService.selectStudent(score.getStuId());
            if (student == null) {
                log.error("添加成绩失败：学号 {} 的学生不存在", score.getStuId());
                return Result.error("添加成绩失败：该学号的学生不存在，请先添加学生信息");
            }
            
            // 验证成绩数据非空
            if (score.getMath() == null || 
                score.getEnglish() == null || 
                score.getDatabase() == null || 
                score.getJava() == null || 
                score.getWeb() == null) {
                log.error("添加成绩失败：成绩数据不能为空");
                return Result.error("添加成绩失败：所有成绩数据都必须填写");
            }
            
            // 验证成绩范围
            if (score.getMath() < 0 || score.getMath() > 100 ||
                score.getEnglish() < 0 || score.getEnglish() > 100 ||
                score.getDatabase() < 0 || score.getDatabase() > 100 ||
                score.getJava() < 0 || score.getJava() > 100 ||
                score.getWeb() < 0 || score.getWeb() > 100) {
                log.error("添加成绩失败：成绩数据不合法，必须在0-100之间");
                return Result.error("添加成绩失败：成绩数据不合法，必须在0-100之间");
            }
            
            // 确保学生姓名与学号匹配
            score.setStuName(student.getStuName());
            
            scoreService.addScore(score);
            log.info("添加学生的成绩成功");
            return Result.success();
        } catch (Exception e) {
            log.error("添加学生的成绩失败：{}", e.getMessage(), e);
            return Result.error("添加成绩失败：" + e.getMessage());
        }
    }

    /**
     * 删除学生的成绩
     *
     * @PathVariable:把 URL 中的参数绑定到控制器方法的参数上
     */
    @DeleteMapping("/score/{stuid}")
    public Result deleteScore(@PathVariable Integer stuid) {
        log.info("删除学生的成绩:{}", stuid);
        scoreService.deleteScore(stuid);
        return Result.success();
    }

    /**
     * 修改学生的成绩
     */
    @PutMapping("/score")
    public Result updateScore(@RequestBody Score score) {
            log.info("修改学生的成绩: {}", score);
            scoreService.updateScore(score);
            return Result.success();
    }
    /**
     * 根据id查找学生的成绩
     */
    @GetMapping("score/{stuid}")
    public Result selectById(@PathVariable Integer stuid){
        log.info("根据id查找学生的成绩:{}",stuid);
      Score score =  scoreService.selectById(stuid);
      return Result.success(score);
    }

    /**
     * 全查找学生的成绩
     */
    @GetMapping("/score")
    public Result selectAll(){
        log.info("全查找学生的成绩");
     List<Score> scoreList = scoreService.selectAllScore();
        return Result.success(scoreList);
    }
}